
 1000  *SAVE S.DOS LC PATCHES
 1010  *--------------------------------
 1020  PNTR   .EQ $00,01
 1030  PATCH  .EQ $02,03
 1040  *--------------------------------
 1050         .OR $300
 1060         .TF B.DOS LC PATCHES
 1070  *--------------------------------
 1080  PATCHER
 1090         LDA #PATCHES-1
 1100         STA PNTR
 1110         LDA /PATCHES-1
 1120         STA PNTR+1
 1130         LDY #0
 1140   
 1150  .1     JSR GET.BYTE LENGTH OF NEXT PATCH
 1160         BEQ .4       FINISHED
 1170         TAX          SAVE LENGTH IN X
 1180         JSR GET.BYTE ADDRESS OF PATCH
 1190         STA PATCH
 1200         JSR GET.BYTE
 1210         STA PATCH+1
 1220   
 1230  .2     JSR GET.BYTE
 1240         STA (PATCH),Y
 1250         INC PATCH
 1260         BNE .3
 1270         INC PATCH+1
 1280  .3     DEX
 1290         BNE .2
 1300         BEQ .1    ...ALWAYS
 1310   
 1320  .4     RTS
 1330  *--------------------------------
 1340  GET.BYTE
 1350         INC PNTR
 1360         BNE .1
 1370         INC PNTR+1
 1380  .1     LDA (PNTR),Y
 1390         RTS
 1400  *--------------------------------
 1410  NUML   .EQ $44
 1420  NUMH   .EQ $45
 1430  *--------------------------------
 1440  GNNB   .EQ $A1A4
 1450  *--------------------------------
 1460  PATCHES
 1470         .DA #P1.LENGTH,$A1B9
 1480         .PH $A1B9
 1490  *--------------------------------
 1500  *      RETURN .CC. WITH NUMBER IN A,X
 1510  *          OR .CS. IF BAD SYNTAX
 1520  *--------------------------------
 1530  CONVERT.NUMBER.IN.WBUF
 1540         LDY #0       INIT NUMBER = 0
 1550         STY NUML     (AND LEAVE Y=0 TOO)
 1560         STY NUMH  
 1570         JSR GNNB     GET NEXT NON-BLANK CHAR
 1580         BEQ .2       ...NO NUMBER, RETURN 0
 1590         CMP #"$"     HEX OR DECIMAL?
 1600         BEQ .7       ...HEX
 1610  *---CONVERT DECIMAL NUMBER-------
 1620  .3     EOR #$B0     CONVERT CHAR TO DIGIT
 1630         CMP #10
 1640         BCS .4       ...NOT DIGIT
 1650         ASL NUML     SHIFT VALUE 1 LEFT
 1660         ROL NUMH
 1670         ADC NUML     2*VALUE + DIGIT
 1680         TAX
 1690         TYA          A = Y = 0
 1700         ADC NUMH  
 1710         PHA
 1720         ASL NUML     SHIFT VALUE 1 LEFT
 1730         ROL NUMH
 1740         ASL NUML     SHIFT VALUE 1 LEFT
 1750         ROL NUMH
 1760         TXA          ...+ 8*VALUE
 1770         ADC NUML  
 1780         STA NUML  
 1790         PLA
 1800         ADC NUMH  
 1810         STA NUMH  
 1820         BCS .4       ...OVERFLOW
 1830  .1     JSR GNNB     GET NEXT NON-BLANK CHAR
 1840         BNE .3       ...NOT COMMA OR CR
 1850  *---NUMBER IS FINISHED-----------
 1860  .2     LDX NUML     END OF NUMBER
 1870         LDA NUMH     VALUE IN A,X
 1880         CLC          SIGNAL VALID NUMBER
 1890         RTS          RETURN
 1900  *---MERGE NEXT HEX DIGIT---------
 1910  .8     ASL          POSITION DIGIT
 1920         ASL
 1930         ASL
 1940         ASL
 1950         LDX #4       SHIFT VALUE 4 BITS LEFT
 1960  .9     ASL          SHIFT DIGIT INTO VALUE
 1970         ROL NUML
 1980         ROL NUMH
 1990         DEX
 2000         BNE .9
 2010  *---CONVERT HEX NUMBER-----------
 2020  .7     JSR GNNB     GET NEXT NON-BLANK CHAR
 2030         BEQ .2       ...END OF NUMBER
 2040         EOR #$B0     CONVERT ASCII TO DIGIT
 2050         CMP #10      0...9?
 2060         BCC .8       ...YES, 0-9
 2070         ADC #$88     SHIFT RANGE FOR A-F TEST
 2080         CMP #$FA     A...F?
 2090         BCS .8       ...A-F
 2100  *---SYNTAX ERROR-----------------
 2110  .4     SEC          SIGNAL BAD CHAR OR OVERFLOW
 2120         RTS
 2130  *--------------------------------
 2140  GNC.LC.PATCH
 2150         STX $AA5D
 2160         CMP #$E0
 2170         BCC .1
 2180         AND #$DF
 2190  .1     RTS
 2200  *--------------------------------
 2210         .BS $A229-*
 2220  *--------------------------------
 2230  P1.LENGTH .EQ *-$A1B9
 2240         .EP
 2250  *--------------------------------
 2260         .DA #3,$A19E
 2270         .PH $A19E
 2280         JSR GNC.LC.PATCH
 2290         .EP
 2300  *--------------------------------
 2310         .DA #0       END OF PATCHES
 2320  *--------------------------------

